home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / swingall.jar / javax / swing / text / html / FrameSetView.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-07-15  |  4.0 KB  |  201 lines

  1. package javax.swing.text.html;
  2.  
  3. import java.util.StringTokenizer;
  4. import javax.swing.SizeRequirements;
  5. import javax.swing.text.AttributeSet;
  6. import javax.swing.text.BoxView;
  7. import javax.swing.text.CompositeView;
  8. import javax.swing.text.Element;
  9. import javax.swing.text.View;
  10. import javax.swing.text.html.HTML.Attribute;
  11.  
  12. class FrameSetView extends BoxView {
  13.    String[] children;
  14.    int[] percentChildren;
  15.    int[] absoluteChildren;
  16.    int[] relativeChildren;
  17.    int percentTotals;
  18.    int absoluteTotals;
  19.    int relativeTotals;
  20.  
  21.    public FrameSetView(Element var1, int var2) {
  22.       super(var1, var2);
  23.       if (var2 == 1) {
  24.          this.children = this.parseRowColSpec(Attribute.ROWS);
  25.       } else {
  26.          this.children = this.parseRowColSpec(Attribute.COLS);
  27.       }
  28.  
  29.       this.init();
  30.    }
  31.  
  32.    protected SizeRequirements[] getChildRequests(int var1, int var2) {
  33.       int[] var3 = new int[this.children.length];
  34.       this.spread(var1, var3);
  35.       int var4 = ((CompositeView)this).getViewCount();
  36.       SizeRequirements[] var5 = new SizeRequirements[var4];
  37.  
  38.       for(int var6 = 0; var6 < var4; ++var6) {
  39.          View var7 = ((CompositeView)this).getView(var6);
  40.          if (!(var7 instanceof NoFramesView)) {
  41.             var5[var6] = new SizeRequirements((int)var7.getMinimumSpan(var2), var3[var6], (int)var7.getMaximumSpan(var2), 0.5F);
  42.          } else {
  43.             int var8 = (int)var7.getMinimumSpan(var2);
  44.             int var9 = (int)var7.getPreferredSpan(var2);
  45.             int var10 = (int)var7.getMaximumSpan(var2);
  46.             float var11 = var7.getAlignment(var2);
  47.             var5[var6] = new SizeRequirements(var8, var9, var10, var11);
  48.          }
  49.       }
  50.  
  51.       return var5;
  52.    }
  53.  
  54.    private void init() {
  55.       this.percentChildren = new int[this.children.length];
  56.       this.relativeChildren = new int[this.children.length];
  57.       this.absoluteChildren = new int[this.children.length];
  58.  
  59.       for(int var1 = 0; var1 < this.children.length; ++var1) {
  60.          this.percentChildren[var1] = -1;
  61.          this.relativeChildren[var1] = -1;
  62.          this.absoluteChildren[var1] = -1;
  63.          if (this.children[var1].endsWith("*")) {
  64.             if (this.children[var1].length() > 1) {
  65.                this.relativeChildren[var1] = Integer.parseInt(this.children[var1].substring(0, this.children[var1].length() - 1));
  66.                this.relativeTotals += this.relativeChildren[var1];
  67.             } else {
  68.                this.relativeChildren[var1] = 1;
  69.                ++this.relativeTotals;
  70.             }
  71.          } else if (this.children[var1].indexOf(37) != -1) {
  72.             this.percentChildren[var1] = this.parseDigits(this.children[var1]);
  73.             this.percentTotals += this.percentChildren[var1];
  74.          } else {
  75.             this.absoluteChildren[var1] = Integer.parseInt(this.children[var1]);
  76.          }
  77.       }
  78.  
  79.       if (this.percentTotals > 100) {
  80.          for(int var2 = 0; var2 < this.percentChildren.length; ++var2) {
  81.             if (this.percentChildren[var2] > 0) {
  82.                this.percentChildren[var2] = this.percentChildren[var2] * 100 / this.percentTotals;
  83.             }
  84.          }
  85.  
  86.          this.percentTotals = 100;
  87.       }
  88.  
  89.    }
  90.  
  91.    protected void layoutMajorAxis(int var1, int var2, int[] var3, int[] var4) {
  92.       SizeRequirements.calculateTiledPositions(var1, (SizeRequirements)null, this.getChildRequests(var1, var2), var3, var4);
  93.    }
  94.  
  95.    private int parseDigits(String var1) {
  96.       int var2 = 0;
  97.  
  98.       for(int var3 = 0; var3 < var1.length(); ++var3) {
  99.          char var4 = var1.charAt(var3);
  100.          if (Character.isDigit(var4)) {
  101.             var2 = var2 * 10 + Character.digit(var4, 10);
  102.          }
  103.       }
  104.  
  105.       return var2;
  106.    }
  107.  
  108.    private String[] parseRowColSpec(HTML.Attribute var1) {
  109.       AttributeSet var2 = ((View)this).getElement().getAttributes();
  110.       String var3 = "*";
  111.       if (var2 != null && var2.getAttribute(var1) != null) {
  112.          var3 = (String)var2.getAttribute(var1);
  113.       }
  114.  
  115.       StringTokenizer var4 = new StringTokenizer(var3, ",");
  116.       int var5 = var4.countTokens();
  117.       String[] var6 = new String[var5];
  118.  
  119.       for(int var7 = 0; var7 < var5; ++var7) {
  120.          var6[var7] = var4.nextToken().trim();
  121.          if (var6[var7].equals("100%")) {
  122.             var6[var7] = "*";
  123.          }
  124.       }
  125.  
  126.       return var6;
  127.    }
  128.  
  129.    public void setParent(View var1) {
  130.       super.setParent(var1);
  131.       if (var1 == null) {
  132.          for(int var2 = 0; var2 < ((CompositeView)this).getViewCount(); ++var2) {
  133.             View var3 = ((CompositeView)this).getView(var2);
  134.             var3.setParent((View)null);
  135.          }
  136.       }
  137.  
  138.    }
  139.  
  140.    private void spread(int var1, int[] var2) {
  141.       if (var1 != 0) {
  142.          int var3 = 0;
  143.          int var4 = var1;
  144.  
  145.          for(int var5 = 0; var5 < var2.length; ++var5) {
  146.             if (this.absoluteChildren[var5] > 0) {
  147.                var2[var5] = this.absoluteChildren[var5];
  148.                var4 -= var2[var5];
  149.             }
  150.          }
  151.  
  152.          var3 = var4;
  153.  
  154.          for(int var6 = 0; var6 < var2.length; ++var6) {
  155.             if (this.percentChildren[var6] > 0 && var3 > 0) {
  156.                var2[var6] = this.percentChildren[var6] * var3 / 100;
  157.                var4 -= var2[var6];
  158.             } else if (this.percentChildren[var6] > 0 && var3 <= 0) {
  159.                var2[var6] = var1 / var2.length;
  160.                var4 -= var2[var6];
  161.             }
  162.          }
  163.  
  164.          if (var4 > 0 && this.relativeTotals > 0) {
  165.             for(int var13 = 0; var13 < var2.length; ++var13) {
  166.                if (this.relativeChildren[var13] > 0) {
  167.                   var2[var13] = var4 * this.relativeChildren[var13] / this.relativeTotals;
  168.                }
  169.             }
  170.          } else if (var4 > 0) {
  171.             float var7 = (float)(var1 - var4);
  172.             float[] var8 = new float[var2.length];
  173.             var4 = var1;
  174.  
  175.             for(int var9 = 0; var9 < var2.length; ++var9) {
  176.                var8[var9] = (float)var2[var9] / var7 * 100.0F;
  177.                var2[var9] = (int)((float)var1 * var8[var9] / 100.0F);
  178.                var4 -= var2[var9];
  179.             }
  180.  
  181.             int var10 = 0;
  182.  
  183.             while(var4 != 0) {
  184.                if (var4 < 0) {
  185.                   int var10002 = var2[var10++]--;
  186.                   ++var4;
  187.                } else {
  188.                   int var15 = var2[var10++]++;
  189.                   --var4;
  190.                }
  191.  
  192.                if (var10 == var2.length) {
  193.                   var10 = 0;
  194.                }
  195.             }
  196.          }
  197.  
  198.       }
  199.    }
  200. }
  201.